<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        //第一遍
        /* 
           1,箭头函数开始的时候作用域的this指向某一个位置对象后就
           不会改变当前的this
           2,箭头函数不能作为构造函数实例化对象
           3,箭头函数参数只有一个的话可以省略（）
           4,兼有函数参数里面只有一句话可以省略大括号（如果一句话含有return，则return也省略）
        */
        const SCHOOL={
            name:'lili'
        }
        window.name='123';
        console.log(this);//window
        let Person=(name,age)=>{
            this.name=name;
            this.age=age;
        }
        let zhanan=new Person('王思聪','99');
        console.log(zhanan);//报错
        function getName(){
            console.log(this.name);//123
        }
        getName();

        let getName2=()=>{
            console.log(this.name);//123
        }
        getName2();
        getName.call(SCHOOL);//SCHOOL
        getName2.call(SCHOOL);//window
        let fn=q=>q+q;
        console.log(fn(3));//6
        //第二遍
        /* 
           1,箭头函数开始的时候作用域的this指向某一个位置对象后就不会改变当前
           的this
           2,箭头函数不能作为构造函数实例化对象
           3,箭头函数参数只有一个的话可以省略（）
           4,兼有函数参数只有一句话可以省略大括号（如果一句话含有return也一起省略）
        */
        const SCHOOL={
            name:'lili'
        }
        window.name='123';
        console.log(this);//window
        let Person=(name,age)=>{
            this.name=name;
            this.age=age;
        }
        let zhanan=new Person('王思聪','99');
        console.log(zhanan);//报错
        function getName(){
            console.log(this.name);//123
        }
        getName();

        let getName2=()=>{
            console.log(this.name);//123
        }
        getName2();
        getName.call(SCHOOL);//SCHOOL
        getName2.call(SCHOOL);//window
        let fn=q=>q+q;
        console.log(fn(3));//6
        //第三遍
        /* 
           1，箭头函数开始的时候作用域的this指向某一个位置对象后就
           不会改变当前的this
           2, 箭头函数不能作为构造函数实例化对象
           3, 箭头函数参数只有一个的话可以省略（）
           4，箭头函数参数里面只有一句话可以省略大括号及中间的return
        */
        const SCHOOL={
            name:'lili'
        }
        window.name='123';
        console.log(this);//window
        let Person=(name,age)=>{
            this.name=name;
            this.age=age;
        }
        let zhanan=new Person('王思聪','99');
        console.log(zhanan);//报错
        function getName(){
            console.log(this.name);//123
        }
        getName();

        let getName2=()=>{
            console.log(this.name);//123
        }
        getName2();
        getName.call(SCHOOL);//SCHOOL
        getName2.call(SCHOOL);//window
        let fn=q=>q+q;
        console.log(fn(3));//6
    </script>
</body>
</html>